﻿#ifndef _NUIAnimal_h_
#define _NUIAnimal_h_

#include "NUITypedef.h"

namespace NUI
{

	//! 动物的接口类(类的简明介绍,只能写一行)
	/** 接口类各单词首字母大写,前面加"I"标识
		(详细介绍,无需详细介绍时也可不写)
		\note 这是所有动物的基类(备注说明)
	*/
	class IAnimal
	{
	public:
		//! 动物类型(简明介绍)
		/** 标识动物的类型,以确定动物行为特征
			枚举名以E开头，枚举成员以枚举名各单词首字母开头
		*/
		enum EAnimalType
		{
			EAT_BIRD,	//!< 鸟类 (注释在代码后面时用这个符号)
			EAT_FISH,	//!< 鱼类 (注释在代码后面时用这个符号)
		};
	public:
		// 成员变量尽量要在构造函数的初始化列表中进行初始化，注意初始化要按变量声明顺序进行
		// 以免成员间有依赖关系时造成异常
		IAnimal(void)
			: m_name()
			, m_type(EAT_BIRD)
			, m_life(0)
			, m_age(0)
		{
		}

		//! 构造
		/** \param name 名称
			\param type 类型
		*/
		IAnimal(const String &name, EAnimalType type)
			: m_name(name)
			, m_type(type)
			, m_life(0)
			, m_age(0)
		{
		}

		virtual ~IAnimal(void)
		{
		}

	public:

		/// 吃食
		/** 吃食接口
		*/
		virtual void Eat(void) = 0;

		virtual void Sleep(void) = 0;

	private:
		String		m_name;		
		EAnimalType	m_type;
		Int			m_life;
		Int			m_age;

	};

}

#endif	// end of _XUIAnimal_h_